package com.itcam.selectsort;

import java.util.Arrays;
import java.util.List;

/**
 * @author : Cammy.Wu
 * Description : 
 */

public class SelectionSort {

    public static void main(String[] args) {
        int[] a = {9, 5, 7, 12, 1, 3};
        List<Integer> list = Arrays.asList(9, 5, 7, 12, 1, 3);
        System.out.println(Arrays.toString(a));
        selection(a, a.length - 1);
        System.out.println(Arrays.toString(a));
    }

    /**
     * 对数组进行选择排序
     * @param a 待排序的数组
     * @param n 数组的长度减 1
     */
    private static void selection(int[] a, int n) {
        // 外层循环控制已排序部分的边界，从左到右逐步扩大已排序区域
        for (int left = 0; left < n; left++) {
            // 假设当前未排序部分的第一个元素为最小值
            int min = left;
            // 内层循环遍历未排序部分，找到最小值的索引
            for (int i = left; i < n; i++) {
                // 如果当前元素比下一个元素大，则更新最小值的索引
                if (a[i] > a[i + 1]) {
                    min = i + 1;
                }
            }
            // 将找到的最小值与未排序部分的第一个元素交换位置
            swap(a, left, min);
        }
    }

    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}
